package org.ellwood.core.common.exception.common;

/**
 * @ProjectName: ellwood-boot-pro
 * @PackageName: org.ellwood.core.common.exception.common
 * @ClassName: CustomAssert
 * @Description: // 自定义断言
 * @Author: Ellwood
 * @CreateDate: 2024/6/12 - 下午2:01
 * @Version: V1.0.0
 */
public interface CustomAssert {

    /**
     * 创建异常
     * @param args 对象
     * @return 返回结果
     */
    BaseException newException(Object... args);

    /**
     * 创建异常
     * @param t 异常
     * @param args 对象
     * @return 返回结果
     */
    BaseException newException(Throwable t,Object... args);

    /**
     * <p>断言对象<code>obj</code>为空。如果对象<code>obj</code>为空，则抛出异常
     * @param obj 待判断对象
     */
    default void assertNull(Object obj){
        if (obj==null) {
            throw newException();
        }
    }

    default void assertNotNull(Object obj) {
        if (obj != null) {
            throw newException();
        }
    }

    /**
     * boolean型的断言
     * true则抛出异常
     *
     * @param bool true|false
     */
    default void assertTrue(boolean bool) {
        if (bool) {
            throw newException();
        }
    }

    /**
     * boolean型的断言
     * false则抛出异常
     *
     * @param bool true|false
     */
    default void assertFalse(boolean bool) {
        if (!bool) {
            throw newException();
        }
    }

    /**
     * <p>断言对象<code>obj</code>非空。如果对象<code>obj</code>为空，则抛出异常
     * <p>异常信息<code>message</code>支持传递参数方式，避免在判断之前进行字符串拼接操作
     *
     * @param obj  待判断对象
     * @param args message占位符对应的参数列表
     */
    default void assertNull(Object obj, Object... args) {
        if (obj == null) {
            throw newException(args);
        }
    }
}
